// 3. 封装请求库 → 同时api下新建请求接口.
// 初：记得下axios
import axios from 'axios'
import store from '@/store'
import router from '@/router' // 12.
import { Message } from 'element-ui' // 12.

// ① 实例axios对象
export const baseURL = 'http://big-event-vue-api-t.itheima.net'
const myAxios = axios.create({
  baseURL
})

// ② 定义俩拦截器
// 请求拦截器
myAxios.interceptors.request.use(function (config) {
  // 对请求做出什么 (一般用于将token加载进 请求头headers上)
  // 9.7同步：
  const { token } = store.state
  if (token) {
    config.headers.Authorization = `${token}`
  }
  return config
}, function (error) {
  // 对错误做出什么
  return Promise.reject(error)
})

// 响应拦截器
myAxios.interceptors.response.use(function (response) {
  // 对响应做出什么
  return response.data
}, function (error) {
  // 对错误做出什么 (一般是对 token令牌失效后，进行"路由导航守卫"处理)
  if (error.response.status === 401) { // 无效的 token
    // 12. 处理401下token过期,被动退出主页.
    store.commit('updateToken', '')
    store.commit('updateUserInfo', {})

    router.push('/login')

    Message.error('用户身份已过期！！！')
  }
  return Promise.reject(error)
})

// ③ 导出实例
export default myAxios
